home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1996 March / EnigmA AMIGA RUN 05 (1996)(G.R. Edizioni)(IT)[!][issue 1996-03][Skylink CD IV].iso / earcd / assembler / progasm1.lha / SORGENTI2 / LEZIONE6d.s < prev    next >
Text File  |  1994-07-09  |  9KB  |  252 lines

  1.  
  2. ; Lezione6d.s        HIRES E LOWRES NELLO STESSO SCHERMO
  3.  
  4.     SECTION    CiriCop,CODE
  5.  
  6. Inizio:
  7.     move.l    4.w,a6        ; Execbase in a6
  8.     jsr    -$78(a6)    ; Disable - ferma il multitasking
  9.     lea    GfxName(PC),a1    ; Indirizzo del nome della lib da aprire in a1
  10.     jsr    -$198(a6)    ; OpenLibrary
  11.     move.l    d0,GfxBase    ; salvo l'indirizzo base GFX in GfxBase
  12.     move.l    d0,a6
  13.     move.l    $26(a6),OldCop    ; salviamo l'indirizzo della copperlist vecchia
  14.  
  15. ;    Puntiamo i bitplanes in copperlist
  16.  
  17.     MOVE.L    #PIC+(40*50),d0    ; in d0 mettiamo l'indirizzo della PIC, in
  18.                 ; questo caso puntiamo piu' avanti di 50
  19.                 ; linee in modo da far "SALIRE" l'immagine.
  20.     LEA    BPLPOINTERS,A1    ; puntatori nella COPPERLIST
  21.     MOVEQ    #2,D1        ; numero di bitplanes -1 (qua sono 3)
  22. POINTBP:
  23.     move.w    d0,6(a1)    ; copia la word BASSA dell'indirizzo del plane
  24.     swap    d0        ; scambia le 2 word di d0 (es: 1234 > 3412)
  25.     move.w    d0,2(a1)    ; copia la word ALTA dell'indirizzo del plane
  26.     swap    d0        ; scambia le 2 word di d0 (es: 3412 > 1234)
  27.     ADD.L    #40*256,d0    ; + lunghezza bitplane -> prossimo bitplane
  28.     addq.w    #8,a1        ; andiamo ai prossimi bplpointers nella COP
  29.     dbra    d1,POINTBP    ; Rifai D1 volte POINTBP (D1=num of bitplanes)
  30.  
  31. ;     PUNTIAMO IL NOSTRO BITPLANE
  32.  
  33.     MOVE.L    #BITPLANE,d0    ; in d0 mettiamo l'indirizzo della PIC,
  34.     LEA    BPLPOINTERS2,A1    ; puntatori nella COPPERLIST
  35.     move.w    d0,6(a1)    ; copia la word BASSA dell'indirizzo del plane
  36.     swap    d0        ; scambia le 2 word di d0 (es: 1234 > 3412)
  37.     move.w    d0,2(a1)    ; copia la word ALTA dell'indirizzo del plane
  38.  
  39.     move.l    #COPPERLIST,$dff080    ; Puntiamo la nostra COP
  40.     move.w    d0,$dff088        ; Facciamo partire la COP
  41.     move.w    #0,$dff1fc        ; Disattiva l'AGA
  42.     move.w    #$c00,$dff106        ; Disattiva l'AGA
  43.  
  44.     bsr.w    print        ; Stampa le linee di testo sullo schermo
  45.                 ; in HIRES
  46. mouse:
  47.     btst    #6,$bfe001    ; tasto sinistro del mouse premuto?
  48.     bne.s    mouse        ; se no, torna a mouse:
  49.  
  50.     move.l    OldCop(PC),$dff080    ; Puntiamo la cop di sistema
  51.     move.w    d0,$dff088        ; facciamo partire la vecchia cop
  52.  
  53.     move.l    4.w,a6
  54.     jsr    -$7e(a6)    ; Enable - riabilita il Multitasking
  55.     move.l    gfxbase(PC),a1    ; Base della libreria da chiudere
  56.     jsr    -$19e(a6)    ; Closelibrary - chiudo la graphics lib
  57.     rts            ; USCITA DAL PROGRAMMA
  58.  
  59. ;    Dati
  60.  
  61. GfxName:
  62.     dc.b    "graphics.library",0,0
  63.  
  64. GfxBase:        ; Qua ci va l'indirizzo di base per gli Offset
  65.     dc.l    0    ; della graphics.library
  66.  
  67. OldCop:            ; Qua ci va l'indirizzo della vecchia COP di sistema
  68.     dc.l    0
  69.  
  70. ;    Routine che stampa caratteri larghi 8x8 pixel (su schermo HIRES)
  71.  
  72. PRINT:
  73.     LEA    TESTO(PC),A0    ; Indirizzo del testo da stampare in a0
  74.     LEA    BITPLANE,A3    ; Indirizzo del bitplane destinazione in a3
  75.     MOVEQ    #15-1,D3    ; NUMERO RIGHE DA STAMPARE: 15
  76. PRINTRIGA:
  77.     MOVEQ    #80-1,D0    ; NUMERO COLONNE PER RIGA: 80 (hires!)
  78. PRINTCHAR2:
  79.     MOVEQ    #0,D2        ; Pulisci d2
  80.     MOVE.B    (A0)+,D2    ; Prossimo carattere in d2
  81.     SUB.B    #$20,D2        ; TOGLI 32 AL VALORE ASCII DEL CARATTERE, IN
  82.                 ; MODO DA TRASFORMARE, AD ESEMPIO, QUELLO
  83.                 ; DELLO SPAZIO (che e' $20), in $00, quello
  84.                 ; DELL'ASTERISCO ($21), in $01...
  85.     MULU.W    #8,D2        ; MOLTIPLICA PER 8 IL NUMERO PRECEDENTE,
  86.                 ; essendo i caratteri alti 8 pixel
  87.     MOVE.L    D2,A2
  88.     ADD.L    #FONT,A2    ; TROVA IL CARATTERE DESIDERATO NEL FONT...
  89.  
  90.                 ; STAMPIAMO IL CARATTERE LINEA PER LINEA
  91.     MOVE.B    (A2)+,(A3)    ; stampa LA LINEA 1 del carattere
  92.     MOVE.B    (A2)+,80(A3)    ; stampa LA LINEA 2  " "
  93.     MOVE.B    (A2)+,80*2(A3)    ; stampa LA LINEA 3  " "
  94.     MOVE.B    (A2)+,80*3(A3)    ; stampa LA LINEA 4  " "
  95.     MOVE.B    (A2)+,80*4(A3)    ; stampa LA LINEA 5  " "
  96.     MOVE.B    (A2)+,80*5(A3)    ; stampa LA LINEA 6  " "
  97.     MOVE.B    (A2)+,80*6(A3)    ; stampa LA LINEA 7  " "
  98.     MOVE.B    (A2)+,80*7(A3)    ; stampa LA LINEA 8  " "
  99.  
  100.     ADDQ.w    #1,A3        ; A1+1, avanziamo di 8 bit (PROSSIMO CARATTERE)
  101.  
  102.     DBRA    D0,PRINTCHAR2    ; STAMPIAMO D0 (40) CARATTERI PER RIGA
  103.  
  104.     ADD.W    #80*7,A3    ; ANDIAMO A CAPO
  105.  
  106.     DBRA    D3,PRINTRIGA    ; FACCIAMO D3 RIGHE
  107.  
  108.     RTS
  109.  
  110.  
  111.         ; numero caratteri per linea: 80, dunque 2 di queste da 40!
  112. TESTO:         ;          1111111111222222222233333333334
  113.          ;     1234567890123456789012345678901234567890
  114.     dc.b    '   PRIMA RIGA  IN HIRES 640 PIXEL DI LAR' ; 1a \ PRIMA RIGA
  115.     dc.b    'GHEZZA!  -- -- --   SEMPRE LA PRIMA RIGA' ; 1b /
  116.     dc.b    '                SECONDA RIGA            ' ; 2  \ SECONDA RIGA
  117.     dc.b    'ANCORA SECONDA RIGA                     ' ;    /
  118.     dc.b    '     /\  /                              ' ; 3
  119.     dc.b    '                                        ' ;
  120.     dc.b    '    /  \/                               ' ; 4
  121.     dc.b    '                                        ' ;
  122.     dc.b    '                                        ' ; 5
  123.     dc.b    '                                        ' ;
  124.     dc.b    '        SESTA RIGA                      ' ; 6
  125.     dc.b    '                        FINE SESTA RIGA ' ;
  126.     dc.b    '                                        ' ; 7
  127.     dc.b    '                                        ' ;
  128.     dc.b    '                                        ' ; 8
  129.     dc.b    '                                        ' ;
  130.     dc.b    'FABIO CIUCCI COMMUNICATION INTERNATIONAL' ; 9
  131.     dc.b    ' MARKETING TRUST TRADEMARK COPYRIGHTED  ' ;
  132.     dc.b    '                                        ' ; 10
  133.     dc.b    '                                        ' ;
  134.     dc.b    '   1234567890 !@#$%^&*()_+|\=-[]{}      ' ; 11
  135.     dc.b    '   PROVE TECNICHE DI TRASMISSIONE       ' ;
  136.     dc.b    '                                        ' ; 12
  137.     dc.b    '                                        ' ;
  138.     dc.b    '     LA PALINGENETICA OBLITERAZIONE DELL' ; 13
  139.     dc.b    "'IO TRASCENDENTALE CHE SI IMMEDESIMA    " ;
  140.     dc.b    '                                        ' ; 14
  141.     dc.b    '                                        ' ;
  142.     dc.b    '                                        ' ; 15
  143.     dc.b    '                                        ' ;
  144.     dc.b    '  Nel mezzo del cammin di nostra vita   ' ; 16
  145.     dc.b    '                                        ' ;
  146.     dc.b    '                                        ' ; 17
  147.     dc.b    '                                        ' ;
  148.     dc.b    '    Mi RitRoVaI pEr UnA sELva oScuRa    ' ; 18
  149.     dc.b    '                                        ' ;
  150.     dc.b    '                                        ' ; 19
  151.     dc.b    '                                        ' ;
  152.     dc.b    '    CHE LA DIRITTA VIA ERA SMARRITA     ' ; 20
  153.     dc.b    '                                        ' ;
  154.     dc.b    '                                        ' ; 21
  155.     dc.b    '                                        ' ;
  156.     dc.b    '  AHI Quanto a DIR QUAL ERA...          ' ; 22
  157.     dc.b    '                                        ' ;
  158.     dc.b    '                                        ' ; 23
  159.     dc.b    '                                        ' ;
  160.     dc.b    '                                        ' ; 24
  161.     dc.b    '                                        ' ;
  162.     dc.b    '                                        ' ; 25
  163.     dc.b    '                                        ' ;
  164.     dc.b    '                                        ' ; 26
  165.     dc.b    '                                        ' ;
  166.  
  167.     EVEN
  168.  
  169.  
  170.  
  171.     SECTION    GRAPHIC,DATA_C
  172.  
  173. COPPERLIST:
  174.     dc.w    $120,$0000,$122,$0000,$124,$0000,$126,$0000,$128,$0000 ; SPRITE
  175.     dc.w    $12a,$0000,$12c,$0000,$12e,$0000,$130,$0000,$132,$0000
  176.     dc.w    $134,$0000,$136,$0000,$138,$0000,$13a,$0000,$13c,$0000
  177.     dc.w    $13e,$0000
  178.  
  179.     dc.w    $8e,$2c81    ; DiwStrt    (registri con valori normali)
  180.     dc.w    $90,$2cc1    ; DiwStop
  181.     dc.w    $92,$0038    ; DdfStart
  182.     dc.w    $94,$00d0    ; DdfStop
  183.     dc.w    $102,0        ; BplCon1
  184.     dc.w    $104,0        ; BplCon2
  185.     dc.w    $108,0        ; Bpl1Mod
  186.     dc.w    $10a,0        ; Bpl2Mod
  187.  
  188.             ; 5432109876543210
  189.     dc.w    $100,%0011001000000000    ; bits 13 e 12 accesi!! (3 = %011)
  190.  
  191. BPLPOINTERS:
  192.     dc.w $e0,$0000,$e2,$0000    ;primo     bitplane
  193.     dc.w $e4,$0000,$e6,$0000    ;secondo bitplane
  194.     dc.w $e8,$0000,$ea,$0000    ;terzo     bitplane
  195.  
  196.     dc.w    $180,$000    ; color0
  197.     dc.w    $182,$475    ; color1
  198.     dc.w    $184,$fff    ; color2
  199.     dc.w    $186,$ccc    ; color3
  200.     dc.w    $188,$999    ; color4
  201.     dc.w    $18a,$232    ; color5
  202.     dc.w    $18c,$777    ; color6
  203.     dc.w    $18e,$444    ; color7
  204.  
  205. ;    QUA RIDEFINIAMO BPLCON0,COLORI,DDFSTART/STOP e PUNTATORI AI BITPLANES!
  206.  
  207.     dc.w    $a007,$FFFE
  208.  
  209.     dc.w    $92,$003c    ; DdfStart HIRES
  210.     dc.w    $94,$00d4    ; DdfStop HIRES
  211.             ; 5432109876543210
  212.     dc.w    $100,%1001001000000000    ; 1 bitplane HIRES 640x256
  213.  
  214. BPLPOINTERS2:
  215.     dc.w $e0,$0000,$e2,$0000    ;primo     bitplane
  216.  
  217.     dc.w    $0180,$000    ; color0 - SFONDO
  218.     dc.w    $0182,$19a    ; color1 - SCRITTE
  219.  
  220.     dc.w    $FFFF,$FFFE    ; Fine della copperlist
  221.  
  222. ;    Il FONT caratteri 8x8
  223.  
  224. FONT:
  225. ;    incbin    "metal.fnt"    ; Carattere largo
  226. ;    incbin    "normal.fnt"    ; Simile ai caratteri kickstart 1.3
  227.     incbin    "nice.fnt"    ; Carattere stretto
  228.  
  229. PIC:
  230.     incbin    "amiga.320*256*3"    ; qua carichiamo la figura in RAW,
  231.  
  232.     SECTION    MIOPLANE,BSS_C    ; Le SECTION BSS devono essere fatte di
  233.                 ; soli ZERI!!! si usa il DS.b per definire
  234.                 ; quanti zeri contenga la section.
  235.  
  236. BITPLANE:
  237.     ds.b    80*256    ; un bitplane HIres 640x256
  238.  
  239.     end
  240.  
  241. Si potrebbe cambiare risoluzione grafica anche 50 volte nello stesso schermo,
  242. basta ridefinire BPLCON0, colori e puntatori ai bitplanes.
  243. Questo puo' essere utile quando servono, ad esempio, 32 colori nel centro dello
  244. schermo per far camminare gli ometti di un gioco, ma ne occorrono 16 nel cielo
  245. e magari solo 4 per il pannello col punteggio, che si puo' fare in HIRES.
  246. Basta considerare che piu' linee in HIRES ci sono e piu' l'esecuzione
  247. rallenta, e piu' colori ci sono meno tempo hanno gli altri coprocessori e
  248. il 68000 per lavorare. Per questo conviene fare solo delle "strisce" di
  249. schermo in HIRES o in HAM, per esempio, lasciando le altre parti con meno
  250. colori e in lowres per velocizzare le operazioni.
  251.  
  252.